#pragma once

#define IOCTL_FILTER_LOAD           CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 0x01, METHOD_BUFFERED, FILE_WRITE_DATA) //88004
#define IOCTL_FILTER_UNLOAD         CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 0x02, METHOD_BUFFERED, FILE_WRITE_DATA) //88008
#define IOCTL_FILTER_CREATE         CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 0x03, METHOD_BUFFERED, FILE_READ_DATA)  //8400C
#define IOCTL_FILTER_ATTATCH        CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 0x04, METHOD_BUFFERED, FILE_WRITE_DATA) //88010
#define IOCTL_FILTER_DETATCH        CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 0x05, METHOD_BUFFERED, FILE_WRITE_DATA) //88014
#define IOCTL_FILTER_SEND_MESSAGE   CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 0x06, METHOD_NEITHER,  FILE_WRITE_DATA) //8801B
#define IOCTL_FILTER_GET_MESSAGE    CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 0x07, METHOD_NEITHER,  FILE_READ_DATA)  //8401F
#define IOCTL_FILTER_REPLY_MESSAGE  CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 0x08, METHOD_NEITHER,  FILE_WRITE_DATA) //88023
#define IOCTL_FILTER_FIND_FIRST     CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 0x09, METHOD_BUFFERED, FILE_READ_DATA)  //84024
#define IOCTL_FILTER_FIND_NEXT      CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 0x0A, METHOD_BUFFERED, FILE_READ_DATA)  //84028
#define IOCTL_FILTER_GET_INFO       CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 0x0B, METHOD_BUFFERED, FILE_READ_DATA)  //8402C


typedef struct _FILTER_NAME
{
    USHORT Length;
    WCHAR FilterName[1];

} FILTER_NAME, *PFILTER_NAME;



typedef struct _FILTER_PORT_DATA
{
    ULONG Size;
    UNICODE_STRING PortName;
    ULONG Options;
    PVOID Context;
    ULONG ContextSize;

} FILTER_PORT_DATA, *PFILTER_PORT_DATA;
